MP gets this forced...
//7F006134:
JAL	7F09A464	;V0=#players
SWC1	F4,03C0 (V0)
ADDIU	AT,R0,0001
BNE	V0,AT,7F006158
NOP
//7F006148:	solo
JAL	7F07A9B8	;solo intro camera
ADDIU	A0,R0,0001
BEQ	R0,R0,7F006160
NOP
//7F006158:	MP
JAL	7F07A9B8	;set MP rotating camera
ADDIU	A0,R0,0009
//7F006160:

so, if MP, will need to see if either the 03 or 06 pointers are set
if so, use solo intro routine as override.

to do that, need a little room...
//7F00606C:	big long mess of redundancy
8E480000	LW	T0,0000 (S2)
240A0006	ADDIU	T2,R0,0006
AD0200A8	SW	V0,00A8 (T0)
8E490000	LW	T1,0000 (S2)
8D2B00A8	LW	T3,00A8 (T1)
AD600004	SW	R0,0004 (T3)
8E4C0000	LW	T4,0000 (S2)
8D8D00A8	LW	T5,00A8 (T4)
A1AA0000	SB	T2,0000 (T5)
8E590000	LW	T9,0000 (S2)
C7A0008C	LWC1	F0,008C (SP)
E7200408	SWC1	F0,0408 (T9)
8E580000	LW	T8,0000 (S2)
8F0F00A8	LW	T7,00A8 (T8)
E5E00008	SWC1	F0,0008 (T7)
8E4E0000	LW	T6,0000 (S2)
C7A00090	LWC1	F0,0090 (SP)
E5C0040C	SWC1	F0,040C (T6)
8E480000	LW	T0,0000 (S2)
8D0900A8	LW	T1,00A8 (T0)
E520000C	SWC1	F0,000C (T1)
8E4B0000	LW	T3,0000 (S2)
C7A00094	LWC1	F0,0094 (SP)
E5600410	SWC1	F0,0410 (T3)
8E4C0000	LW	T4,0000 (S2)
8D8A00A8	LW	T2,00A8 (T4)
E5400010	SWC1	F0,0010 (T2)
8E590000	LW	T9,0000 (S2)
8FAD0084	LW	T5,0084 (SP)
8F3800A8	LW	T8,00A8 (T9)
AF0D0014	SW	T5,0014 (T8)
8E4F0000	LW	T7,0000 (S2)
//7F0060EC:
0FC0E929	JAL	7F03A4A4
8DE400A8	LW	A0,00A8 (T7)
8E4E0000	LW	T6,0000 (S2)
0FC0E901	JAL	7F03A404
8DC400A8	LW	A0,00A8 (T6)
//7F006100:
8E420000	LW	V0,0000 (S2)
3C018005	LUI	AT,8005
C420F1E0	LWC1	F0,F1E0 (AT)
C44604B4	LWC1	F6,04B4 (V0)
46003203	DIV.S	F8,F6,F0
E44803B8	SWC1	F8,03B8 (V0)
8E420000	LW	V0,0000 (S2)
C44A04B8	LWC1	F10,04B8 (V0)
46005403	DIV.S	F16,F10,F0
E45003BC	SWC1	F16,03BC (V0)
8E420000	LW	V0,0000 (S2)
C45204BC	LWC1	F18,04BC (V0)
46009103	DIV.S	F4,F18,F0
//7F006134:	detect MP
0FC26919	JAL	7F09A464
E44403C0	SWC1	F4,03C0 (V0)
24010001	ADDIU	AT,R0,0001
14410005	BNE	V0,AT,7F006158	;branch if multi
00000000	NOP
//7F006148:	solo
0FC1EA6E	JAL	7F07A9B8	;set camera mode
24040001	ADDIU	A0,R0,0001
10000003	BEQ	R0,R0,7F006160
00000000	NOP
//7F006158:	multi
0FC1EA6E	JAL	7F07A9B8	;set camera mode
24040009	ADDIU	A0,R0,0009
//7F006160:
	
	
reduction!
//7F00606C:	3AB9C	big long mess of redundancy
8E480000	LW	T0,0000 (S2)
240A0006	ADDIU	T2,R0,0006
AD0200A8	SW	V0,00A8 (T0)
A04A0000	*SB	T2,0000 (V0)
AC400004	*SW	R0,0004 (V0)
C7A0008C	LWC1	F0,008C (SP)
E5000408	*SWC1	F0,0408 (T0)
E4400008	*SWC1	F0,0008 (V0)
C7A00090	LWC1	F0,0090 (SP)
E500040C	*SWC1	F0,040C (T0)
E440000C	*SWC1	F0,000C (V0)
C7A00094	LWC1	F0,0094 (SP)
E5000410	*SWC1	F0,0410 (T0)
E4400010	*SWC1	F0,0010 (V0)
8FAD0084	LW	T5,0084 (SP)
AC4D0014	*SW	T5,0014 (V0)
//7F0060AC:	3ABDC
0FC0E929	JAL	7F03A4A4
00402025	*OR	A0,V0,R0
8E4E0000	LW	T6,0000 (S2)
0FC0E901	JAL	7F03A404
8DC400A8	LW	A0,00A8 (T6)
//7F0060C0:	3ABF0
8E420000	LW	V0,0000 (S2)
3C018005	LUI	AT,8005
C420F1E0	LWC1	F0,F1E0 (AT)
C44604B4	LWC1	F6,04B4 (V0)
46003203	DIV.S	F8,F6,F0
E44803B8	SWC1	F8,03B8 (V0)
C44A04B8	LWC1	F10,04B8 (V0)
46005403	DIV.S	F16,F10,F0
E45003BC	SWC1	F16,03BC (V0)
C45204BC	LWC1	F18,04BC (V0)
46009103	DIV.S	F4,F18,F0
//7F0060EC:	3AC1C	detect MP
0FC26919	JAL	7F09A464
E44403C0	SWC1	F4,03C0 (V0)
24040001	*ADDIU	A0,R0,0001
10440006	*BEQ	V0,A0,7F006114	;branch if solo
3C018003	*LUI	AT,8003
//7F006100:	3AC30	test if multi set these
8C2264B8	*LW	V0,64B8 (AT)	;p->06 intro entry
8C2164AC	*LW	AT,64AC (AT)	;p->03 intro entry
00220825	*OR	AT,AT,V0	;!0 if either is set
//7F00610C:	3AC3C	default multi if neither set
50200001	*BEQL	AT,R0,+1
24040009	ADDIU	A0,R0,0009
0FC1EA6E	JAL	7F07A9B8	;set camera mode
8E490000	*NOP
//
8D2B00A8	*NOP
8E4C0000	*NOP
8D8D00A8	*NOP
8E590000	*NOP
8E580000	*NOP
8F0F00A8	*NOP
8E4E0000	*NOP
8E480000	*NOP
8D0900A8	*NOP
8E4B0000	*NOP
8E4C0000	*NOP
8D8A00A8	*NOP
8E590000	*NOP
8F3800A8	*NOP
8E4F0000	*NOP
8E420000	*NOP
8E420000	*NOP
//7F006160:	3AC90

0068	0C46 0000	000D3A59 FFFF73AB FFFA989E 000370C3 0000359D
0068	0C46 0000	000CE3A3 FFFF5C3B FFF9F412 0002EB47 0000506C
0002	0C46 0000	0000CCF2 FFFF648F 0000DCF6 00034415 00002CAE
0068	0C46 0000	000C9EC1 00006DAA FFFAB045 00039E00 000609F1

-++ 00000000 02530000 FFD80000 0000C000 0019
-++ FFD80000 01FE0000 00000000 0000C000 0019
-++ 00000000 01A90000 00280000 0000C000 0019
-++ 002D0000 01540000 00000000 0000C000 0019
-++ 00000000 00FF0000 FFD30000 0000C000 0019
-++ FFD30000 00AA0000 00000000 0000C000 0019
-++ 00000000 00550000 00280000 0000C000 0019
-++ 00230000 00140000 00050000 0000C000 0019
-++ 000A0000 00000000 FFE70000 0000C000 0019
-+- 00000000 00000000 00000000 00008000 0000
-+- 00000000 00000000 00000000 00008000 0000
+-- 00000000 00000000 00000000 00000000 0000


seems one more problem.  Forces MP when camera detected.
loops for each character.  how stupid is that...  Wouldn't be so bad if they didn't fry my variables...

wiped at 7F0059DC/EC
intro commands set it then
loops around and resets it for each player but doesn't parse intro again...
need to push the R0->64AC, R0->64B8, R0->64BC, R0->6514 all up
	otherwise, need to get them to parse the stuff prettier

7F005C50:	3A780	type 6: fixed intro cameras
0FC26C54	JAL	7F09B150	;V0=player#
3C018003	LUI	AT,8003
8C2864B8	*LW	T0,64B8 (AT)	;T0=800364B8:last command in list
8C2964BC	*LW	T1,64BC (AT)	;T1=800364BC: count of entries
AC3064B8	SW	S0,64B8 (AT)	;p->command -> 800364B8:last command in list
252A0001	ADDIU	T2,T1,0001	;T2=count+1
14400024	BNEZ	V0,7F005CB0	;only do once
AC2A64BC	SW	T2,64BC (AT)	;800364BC=count++
//7F005C74:	expando
AE080024	SW	T0,0024 (S0)	;command+24=p->previous command
8E0B0004	LW	T3,0004 (S0)	;T3=command+4: x offset
8E0C0008	LW	T4,0008 (S0)	;T4=command+8: y offset
8E0D000C	LW	T5,000C (S0)	;T5=command+C: z offset
448B4000	MTC1	T3,F8
448C9000	MTC1	T4,F18
8E190010	LW	T9,0010 (S0)	;T9=command+10: lateral rotation
468042A0	CVT.S.W	F10,F8	;F10=(float) x offset
448D4000	MTC1	T5,F8
8E180014	LW	T8,0014 (S0)	;T8=command+14: vertical rotation
46809120	CVT.S.W	F4,F18	;F4=(float) y offset
44999000	MTC1	T9,F18
46165403	DIV.S	F16,F10,F22	;F16=x offset/100: x percentage
468042A0	CVT.S.W	F10,F8	;F10=(float) z offset
44984000	MTC1	T8,F8
46162183	DIV.S	F6,F4,F22	;F6=y offset/100: y percentage
E6100004	SWC1	F16,0004 (S0)	;replace x offset with multiplier
46809120	CVT.S.W	F4,F18	;F4=(float) lateral rotation
46165403	DIV.S	F16,F10,F22	;F16=z offset/100: z percentage
E6060008	SWC1	F6,0008 (S0)	;replace y offset with multiplier
468042A0	CVT.S.W	F10,F8	;F10=(float) vertical rotation
46142183	DIV.S	F6,F4,F20	;F6=lat.rot./0x10000: lat.rot.multiplier
E610000C	SWC1	F16,000C (S0)	;replace z offset with multiplier
46145403	DIV.S	F16,F10,F20	;F16=vert.rot./0x10000: vert.rot.multiplier
E6060010	SWC1	F6,0010 (S0)	;replace lat.rot. with multiplier
E6100014	SWC1	F16,0014 (S0)	;replace vert.rot. with multiplier
9604001E	LHU	A0,001E (S0)	;A0=text value 1
10800009	*BEQ	A0,R0,7F005CBC	;branch if text 1 not present
00000000	NOP
0FC30776	JAL	7F0C1DD8	;V0=p->text A0
00000000	NOP
96040022	*LHU	A0,0022 (S0)	;V1=command+20: text value 2
10800004	*BEQ	A0,R0,7F005CBC	;branch if text 2 not present
AE02001C	SW	V0,001C (S0)	;replace text 1 ID w/ p->text
0FC30776	JAL	7F0C1DD8	;V0=p->text A0
00000000	*NOP
AE020020	SW	V0,0020 (S0)	;replace text 2 ID w/ p->text
//7F005CB0:	return
10000039	BEQ	R0,R0,7F005DE4
26100028	ADDIU	S0,S0,0028	;S0+=28: next command
00000000	*NOP
00000000	*NOP

slightly related, this is used in order to omit first text entry
//7F07B5D0:	B0100	display first intro camera string
C4248378	LWC1	F4,8378 (AT)
46041180	ADD.S	F6,F2,F4
4606003E	C.LE.S	F0,F6
3C058004	LUI	A1,8004
4500000E	BC1F	7F07B61C
8CA40EB8	*LW	A0,0EB8 (A1)
0FC228ED	JAL	7F08A3B4
8CA50EB4	LW	A1,0EB4 (A1)
3C0E8003	LUI	T6,8003
8DCE64C0	LW	T6,64C0 (T6)
8DC4001C	LW	A0,001C (T6)
10800003	*BEQ	A0,R0,+3
00000000	NOP
0FC228F2	JAL	7F08A3C8
00000000	*NOP
//7F07B60C:	B013C


7F005BA0	3A6D0	type 3: swirling intro camera
0FC26C54	*JAL	7F09B150	;V0=player#
3C018003	LUI	AT,8003
8C2964AC	*LW	T1,64AC (AT)	;T1=800364AC: p->first entry in rotating camera
51200001	*BEQL	T1,R0,+1	;branch if valid pointer
AC3064AC	SW	S0,64AC (AT)	;p->command -> 800364AC: first entry in rot. camera
1440001A	*BNEZ	V0,RETURN
02001025	OR	V0,S0,R0	;V0=S0: p->command
//7F005BCC:	convert percentages into multipliers
8C4A0008	LW	T2,0008 (V0)	;T2=command+8:x offset
8C4B000C	LW	T3,000C (V0)	;T3=command+C: y offset
8C4C0010	LW	T4,0010 (V0)	;T4=command+10: z offset
448A9000	MTC1	T2,F18
448B4000	MTC1	T3,F8
8C4D0014	LW	T5,0014 (V0)	;T5=lateral rotation
46809120	CVT.S.W	F4,F18	;F4=(float) x offset
448C9000	MTC1	T4,F18
8C590018	LW	T9,0018 (V0)	;T9=rate
468042A0	CVT.S.W	F10,F8	;F10=(float) y offset
448D4000	MTC1	T5,F8
46142183	DIV.S	F6,F4,F20	;F6=x offset/0x10000: percentage change
46809120	CVT.S.W	F4,F18	;F4=(float) z offset
44999000	MTC1	T9,F18
46145403	DIV.S	F16,F10,F20	;F16=y offset/0x10000: percentage change
E4460008	SWC1	F6,0008 (V0)	;replace x offset with multiplier
468042A0	CVT.S.W	F10,F8	;F10=(float) lateral rotation
46142183	DIV.S	F6,F4,F20	;F6=z offset/0x10000: percentage change
E450000C	SWC1	F16,000C (V0)	;replace y offset with multiplier
46809120	CVT.S.W	F4,F18	;F4=rate
46145403	DIV.S	F16,F10,F20	;F16=lateral rot./0x10000: percentage change
E4460010	SWC1	F6,0010 (V0)	;replace z offset with multiplier
46142183	DIV.S	F6,F4,F20	;F6=rate/0x10000: percentage change
E4500014	SWC1	F16,0014 (V0)	;replace lat.rot. with multiplier
E4460018	SWC1	F6,0018 (V0)	;replace rate with multiplier
10000070	BEQ	R0,R0,7F005DE4
26100020	ADDIU	S0,S0,0020	;S0+=20: next command

+_+

QUICK FIX:
get rid of another TLB table
//7F0B48F0:	
2DE10003	*SLTIU	AT,T7,0003
14200007	*BNE	AT,R0,7F0B4914
AC6E0000	SW	T6,0000 (V1)
24010006	*ADDIU	AT,R0,0006
102F0004	*BEQ	AT,T7,7F0B4914
24010008	*ADDIU	AT,R0,0008
142F0004	*BNE	AT,T7,7F0B491C
00000000	*NOP

Okay, now it happens to be parsing the commands right and should be at least using the swirlidigs
Only trouble is with fading.  Fade is inconsistant between characters.
Could action block, but that would be a very ugly solution.
	Instead, should force visible MP regardless if 9 or 1 used.

7F07B1A4:		transitory camera mode handler
	LUI	V1,8003
	ADDIU	V1,V1,6494	;V1=80036494: p->current camera mode
	LW	V0,0000 (V1)	;V0=camera mode
	SW	R0,0000 (V1)	;0->camera mode (reset)
	LW	AT,8003
	SW	R0,6498 (AT)	;0->80036498: gameplay flag
	ADDIU	SP,SP,FFE8
	ADDIU	AT,R0,0001
	BNE	V0,AT,7F07B1DC	;branch if not camera 1: rand stationary intro camera
	SW	RA,0014 (SP)
//7F07B1CC:	camera 1: intro stationary camera + text
	JAL	7F07A9B8	;set camera mode
	ADDIU	A0,R0,0002	;A0=2: fade-to-swirlidig
	BEQ	R0,R0,7F07B294	;return
	LW	RA,0014 (SP)
//7F07B1DC:	test if camera 2
	ADDIU	AT,R0,0002
	BNEL	V0,AT,7F07B204	;branch if not camera 2
	ADDIU	AT,R0,0009
//7F07B1E8:	camera 2: fade to swirlidig
	JAL	7F08A330
	NOP
	JAL	7F07A9B8	;set camera mode
	ADDIU	A0,R0,0003	;A0=3: rotating intro camera
	BEQ	R0,R0,7F07B294	;return
	LW	RA,0014 (SP)
//7F07B200:	
	ADDIU	AT,R0,0009
	BEQ	V0,AT,7F07B290	;return if camera 9: MP intro camera
	ADDIU	AT,R0,0003
	BNEL	V0,AT,7F07B244	;branch if not camera 3
	ADDIU	AT,R0,0004
//7F07B214:	camera 3: rotating intro camera
	JAL	7F07A4A0
	NOP
	LUI	AT,3F80
	MTC1	AT,F14		;F14=1.0: final level (100%)
	MTC1	R0,F12		;F12=0.0: timer
	JAL	7F080A10	;set fade
	NOP
	JAL	7F07A9B8	;set camera mode
	ADDIU	A0,R0,0004	;A0=4: 1st person mode
	BEQ	R0,R0,7F07B294	;return
	LW	RA,0014 (SP)
//7F07B244:
	BEQ	V0,AT,7F07B290	;return if camera 4: 1st person mode
	ADDIU	AT,R0,0005
	BNEL	V0,AT,7F07B268	;branch if not camera 5
	ADDIU	AT,R0,0006
//7F07B254:	camera 5: ???
	JAL	7F07A9B8	;set camera mode
	ADDIU	A0,R0,0006	;A0=6: ???
	BEQ	R0,R0,7F07B294	;return
	LW	RA,0014 (SP)
//7F07B264:
	ADDIU	AT,R0,0006
	BNE	V0,AT,7F07B290	;return if not camera 6
	LUI	V0,8003
//7F07B270:	camera 6: ???
	ADDIU	V0,V0,6510
	LW	T6,0000 (V0)	;T6=80036510: ???
	ADDIU	T7,T6,0001	;T7=T6+1: count++
	SLTI	AT,T7,0003
	BEQ	AT,R0,7F07B290	;return if > 3 (0-2)
	SW	T7,0000 (V0)	;count++ -> 80036510
	JAL	7F07A9B8	;set camera mode
	ADDIU	A0,R0,0005	;A0=5: ???
//7F07B290:		return
	LW	RA,0014 (SP)
	ADDIU	SP,SP,0018
	JR	RA
	NOP


Don't know what this one does, but tests if 1 or 9...
8007B56C:	
	ADDIU	SP,SP,FFC0
	LUI	V0,8003
	LW	V0,6494 (V0)	;V0=80036494: camera mode
	ADDIU	T3,R0,0001
	SW	RA,0014 (SP)
	SW	A0,0040 (SP)
	SW	A1,0044 (SP)
	SW	A2,0048 (SP)
	BEQ	T3,V0,7F07B5A0	;if camera 1, branch
	SW	A3,004C (SP)
	ADDIU	A1,R0,0002
	BNE	A1,V0,7F07B858	;branch if not camera 2
	ADDIU	AT,R0,0009
//7F07B5A0:	camera 1
	BNE	T3,V0,7F07B708	;branch if camera 2
	LUI	T1,8008
...
//7F07B858:	camera 9
	BNEL	V0,AT,7F07BB28	;branch if not camera 9
	ADDIU	AT,R0,0003
	JAL	7F09B150
	NOP
	JAL	7F09B4D8
	OR	A0,V0,R0
	BNEZ	V0,7F07B9C4
	LUI	T1,8008
	LUI	A3,8005
	LW	A3,8374 (A3)
	
